package net.lcheng.service;

import net.lcheng.model.OOrder;
import net.lcheng.model.OOrderRefund;
import net.lcheng.model.UserShoppingCart;

import java.util.List;

/**
 * Created by LV on 2016/7/10.
 */
public interface ShoppingService {

    /**
     * 添加商品到购物车
     * @param cart UserShoppingCart
     * @return
     */
    int addGoodsToCart(UserShoppingCart cart);

    /**
     * 获取购物车的商品数量
     * @param shopId
     * @param buyerUserId
     * @return
     */
    int getUserCartCount(int shopId,String buyerUserId);

    /**
     * 获取购物车里的所有商品
     * @param buyerUserId
     * @param shopId
     * @return
     */
    List<UserShoppingCart> getCartByUserIdAndShopId(String buyerUserId,int shopId);

    /**
     * 由主键查询购物车列表
     * @param key
     * @return
     */
    UserShoppingCart getCartByPrimaryKey(String key);

    /**
     * 删除购物车里记录
     * @param carts 购物车列表
     * @return
     */
    int deleteCartProduct(List<UserShoppingCart> carts);


    /**
     * 结算
     * @param shopId 卖家商铺ID
     * @param buyerUserId 买家对应UserId
     * @param addressId user_shipping_address表主键（买家选的收货地址ID）
     * @param carts 购物车列表（包含多个商品）
     * @return 返回订单号
     */
    String settleAccount(int shopId, String buyerUserId, String addressId, List<UserShoppingCart> carts);



    /**
     * 退货退款（卖家已发货的情况下，暂时退货只能一个一个的退）
     * @param shopId 卖家商铺Id
     * @param buyerUserId 买家对应的UserId
     * @param orderId 订单Id
     * @param productId 退货的商品
     * @param attribute 退货商品的属性
     * @return
     */
    int refundGoodsAndMoney(int shopId,String buyerUserId,String orderId,String productId,String attribute,int quantity,String reason);


    /**
     * 退货退款（卖家已发货的情况下，暂时退货只能一个一个的退）(重写:7.22)
     * @param itemId 要退的订单子商品主键
     * @param reason 退单理由
     * @param cause 退单原因
     * @return int
     */
    int refundGoodsAndMoney(String itemId,String reason,String cause);

    /**
     * 申请退款（卖家没有发货的情况）
     * @param shopId 商铺Id
     * @param buyerUserId 买家对应的UserId
     * @param orderId 原订单Id
     * @return int
     */
    int refundMoney(int shopId, String buyerUserId, String orderId,String reason);


    /**
     *  申请退款（卖家没有发货的情况）(重写:7.22)
     * @param orderId 申请退款的订单Id
     * @param reason  退单理由
     * @param cause 退单原因
     * @return int
     */
    int refundMoney(String orderId,String reason,String cause);

    /**
     * 买家发货
     * @param refundId 退货订单Id
     * @param shippingCode 物流公司代码
     * @param shippingName 物流公司名
     * @param trackingNum 快递单号
     * @return
     */
    int deliverGoodsByBuyer(String refundId,String shippingCode,String shippingName,String trackingNum);


    /**
     * 卖家发货及取消退款订单
     * @param refundId 退单Id
     * @param shippingCode 快递公司代码
     * @param shippingName 快递公司名
     * @param trackingNum 快递号
     * @return int
     */
    int deliverGoodsThenCancelRefundOrder(String refundId,String shippingCode,String shippingName,String trackingNum);

    /**
     * 卖家同意退货退款
     * @param orderRefund 此对象已经包含卖家填写的货物退的地址和要要退的金额（还需添加收货人地址和姓名）
     * @return int
     */
    int agreeRefundMoneyAndGoods(OOrderRefund orderRefund);


    /**
     * 买家退还货物
     * @param orderRefund (包含快递信息)
     * @return int
     */
    int refundGoodsByUser(OOrderRefund orderRefund);

    /**
     * 买家确认收货
     * @param order
     * @return
     */
    int confirmReceiveGoods(OOrder order);

    /**
     * 买家支付
     * @param order 要支付的订单
     * @return int
     */
    int paymentByBuyer(OOrder order);
}
